package com.xie.leetcode.array;

//加一
//        给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
//
//        最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
//
//        你可以假设除了整数 0 之外，这个整数不会以零开头。
//
//         
//
//        示例 1：
//
//        输入：digits = [1,2,3]
//        输出：[1,2,4]
//        解释：输入数组表示数字 123。
//        示例 2：
//
//        输入：digits = [4,3,2,1]
//        输出：[4,3,2,2]
//        解释：输入数组表示数字 4321。
//        示例 3：
//
//        输入：digits = [0]
//        输出：[1]
//         
//
//        提示：
//
//        1 <= digits.length <= 100
//        0 <= digits[i] <= 9
//        相关标签
//        数组
//        数学
//
//        作者：力扣 (LeetCode)
//        链接：https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/
//        来源：力扣（LeetCode）
//        著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。

import java.math.BigDecimal;
import java.util.Arrays;

/**
 * @author xiezhendong
 * @date 2021/10/21
 */
public class PlusOne {

    public static void main(String[] args) {
        PlusOne plusOne = new PlusOne();
        System.out.println(Arrays.toString(plusOne.plusOne(new int[]{1, 2, 3})));
        System.out.println(Arrays.toString(plusOne.plusOne(new int[]{4, 3, 2, 1})));
        System.out.println(Arrays.toString(plusOne.plusOne(new int[]{0})));
        System.out.println(Arrays.toString(plusOne.plusOne(new int[]{9, 8, 7, 6, 5, 4, 3, 2, 1, 0})));
        System.out.println(Arrays.toString(plusOne.plusOne(new int[]{7, 2, 8, 5, 0, 9, 1, 2, 9, 5, 3, 6, 6, 7, 3, 2, 8, 4, 3, 7, 9, 5, 7, 7, 4, 7, 4, 9, 4, 7, 0, 1, 1, 1, 7, 4, 0, 0, 6})));
    }

    public int[] plusOne(int[] digits) {
        BigDecimal num = BigDecimal.ZERO;
        for (int i = 0; i < digits.length; i++) {
            int weishu = digits.length - i;
            BigDecimal num10 = BigDecimal.ONE;
            for (int i1 = 1; i1 < weishu; i1++) {
                num10 = num10.multiply(BigDecimal.TEN);
            }
            BigDecimal value = num10.multiply(BigDecimal.valueOf(digits[i]));
            num = value.add(num);
        }

        BigDecimal numNew = num.add(BigDecimal.ONE);
        int numNewLeng = String.valueOf(numNew).length();
        int[] digitsNew = new int[numNewLeng];
        for (int i = 0; i < numNewLeng; i++) {
            int weishu = numNewLeng - i;
            BigDecimal num10 = BigDecimal.ONE;
            for (int i1 = 1; i1 < weishu; i1++) {
                num10 = num10.multiply(BigDecimal.TEN);
            }
            BigDecimal valueLast = BigDecimal.valueOf(numNew.divide(num10.multiply(BigDecimal.TEN)).intValue()).multiply(BigDecimal.TEN);
            BigDecimal value = BigDecimal.valueOf(numNew.divide(num10).intValue()).subtract(BigDecimal.valueOf(valueLast.intValue()));
            digitsNew[i] = value.intValue();
        }

        return digitsNew;
    }
}
